#ifndef __BASIC_IO_H_
#define __BASIC_IO_H_

#define MEMORY_SIZE (26)
#define PROGRAM_SIZE (10000)

#ifndef WIN32
#define stricmp strcasecmp
#define strnicmp strncasecmp
#endif

typedef enum
{
  var_null = 0, // null类型
  var_double,   // duoble类型
  var_string    // 字符串类型
} variant_type; // 变量类型
typedef char STRING[128];
typedef struct
{
  variant_type type; // 变量类型
  union
  {           // 变量值
    double i; // 如果是小数，就从i这里取值
    STRING s; // 如果是字符串，就从s这里取值
  };
} VARIANT; // 变量
typedef struct
{
  int ln;      // line number
  STRING line; // 字符串内容
} CODE;

extern VARIANT memory[MEMORY_SIZE];
extern CODE code[PROGRAM_SIZE];
extern int cp;
extern int code_size;

void load_program(STRING filename);
void exec_assignment(const STRING line);
void exec_input(const STRING);
void exec_print(const STRING);

#endif
